﻿using System;
using System.Text;
using System.Text.RegularExpressions;

public class Strings
{
    public static string CutLenStr(string ostr, int len)
    {
        if ((ostr.Length == 1) && (len > 0))
        {
            return ostr;
        }
        if ((len == 1) && (ostr.Length > 0))
        {
            return ostr.Substring(0, 1);
        }
        int num = len * 2;
        if (GetStrLen(ostr) <= num)
        {
            return ostr;
        }
        return GetLenStr(ostr, ref ostr, num);
    }

    private static string GetLenStr(string str, ref string ostr, int len)
    {
        int strLen = GetStrLen(str);
        if (strLen == len)
        {
            return str;
        }
        if ((strLen + 1) == len)
        {
            string s = ostr.Substring(0, str.Length + 1);
            if (GetStrLen(s) == len)
            {
                return s;
            }
            return str;
        }
        if ((strLen - 1) == len)
        {
            string str3 = ostr.Substring(0, str.Length - 1);
            if (GetStrLen(str3) <= len)
            {
                return str3;
            }
            return str;
        }
        if (strLen < len)
        {
            int num2 = str.Length + Convert.ToInt32((double) ((len - strLen) * 0.5));
            str = ostr.Substring(0, num2);
            return GetLenStr(str, ref ostr, len);
        }
        int length = Convert.ToInt32((double) ((strLen - len) * 0.5));
        str = ostr.Substring(0, length);
        return GetLenStr(str, ref ostr, len);
    }

    public static int GetStrLen(string s)
    {
        return Encoding.Default.GetBytes(s).Length;
    }

    public static bool RegexValid(string input, string pattern)
    {
        Regex regex = new Regex(pattern);
        return regex.IsMatch(input);
    }
}

